<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<ul id="list">
    <li>公司简介</li>
    <li>联系我们</li>
    <li>营销网络</li>
</ul>

<script>

    // 立即执行函数：声明一个函数，并马上调用这个匿名函数就叫做立即执行函数；也可以说立即执行函数是一种语法，让你的函数在定义以后立即执行；

    // ===========  作用  ===========
    // 不必为函数命名，避免了污染全局变量
    // 立即执行函数内部形成了一个单独的作用域，可以封装一些外部无法读取的私有变量
    // 封装变量


    // 不加参数
    (function () {
        const days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
            today = new Date(),
            msg = 'Today is ' + days[today.getDay()] + ', ' + today.getDate();
        console.log('立即执行函数：', msg)
    }()); // "Today is Fri, 13"

    // 立即执行函数加参数
    (function (obj, when) {
        console.log('加参数：我的名字是：', obj.name, ' 今天是：', when)
    })({name: 'jack', age: 21}, new Date());

    // 加全局变量作为参数
    (function (global) {
        console.log('指针：', global)
    })(this);

    // 立即执行函数的返回值
    const result = (function () {
        return 2 + 3
    })()
    console.log('立即执行函数的返回值:', result)

    // 使用场景
    let list = document.getElementById("list")
    let li = list.children
    console.log('list.children:', li)

    for (let i = 0; i < li.length; i++) {
        li[i].onclick = function () {
            alert(i)
        }
    }
</script>
</body>
</html>